package com.xu;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Random;
import java.util.concurrent.CyclicBarrier;

/**
 *
 * @author xudenghui
 * @create 2023-02-03 16:44
 **/
public class CyclicBarrierDemo {

//    public static class Soldier  implements  Runnable{
//
//        private String soldier;
//
//        private final CyclicBarrier cyclic;
//
//        public Soldier(CyclicBarrier cyclic,String soldier) {
//            this.cyclic = cyclic;
//            this.soldier = soldier;
//        }
//
//        @Override
//        public void run() {
//            try {
//                //等待所以士兵到齐
//                cyclic.await();
//                doWork();
//                //等待所有士兵完成工作
//                cyclic.await();
//            }catch (Exception e){
//                e.printStackTrace();
//            }
//        }
//
//        private void doWork() {
//            try {
//                Thread.sleep(Math.abs(new Random().nextInt()%10000));
//            }catch (InterruptedException e){
//                e.printStackTrace();
//            }
//            System.out.println(soldier+":任务完成");
//        }
//
//
//        public static class  BarrierRun implements Runnable{
//            boolean flag;
//            int N;
//
//            public BarrierRun(boolean flag,int N){
//                this.flag = flag;
//                this.N = N;
//            }
//
//            @Override
//            public void run() {
//               if (flag){
//                   System.out.println("司令：{士兵"+N+"个,任务完成！}");
//               }else{
//                   System.out.println("司令：{士兵"+N+"个,集合完毕！}");
//                   flag = true;
//               }
//            }
//        }
//    }

//    public static void main(String[] args) {
//        final int N = 10;
//        Thread[] allSoldier = new Thread[N];
//        boolean flag =false;
//        CyclicBarrier cyclic = new CyclicBarrier(N, new Soldier.BarrierRun(flag, N));
//        System.out.println("集合队伍！");
//        for(int i = 0;i<N;i++){
//            allSoldier[i] = new Thread(new Soldier(cyclic, "士兵"+i));
//            allSoldier[i].start();
//        }
//    }


    public static void main(String[] args) {
        System.out.println(getBigDecimal(12.99));
    }
//
//    不要使用BigDecimal(double)去构造一个BigDecimal对象，因为double类型在计算机表示方法中并不精确
//    ，因此，BigDecimal(double)构造出来的对象很可能不是预期的大小，
//    若一定要使用double类型去构造一个BigDecimal对象，请使用BigDecimal.valueOf方法，
//    该方法先将double转换为String，再通过String构造BigDecimal对象，通常更建议使用public BigDecimal(String val)构造方法

    /**
     * Object转BigDecimal类型
     *
     * @param value 要转的object类型
     * @return 转成的BigDecimal类型数据
     */
    public static BigDecimal getBigDecimal(Object value) {
        BigDecimal ret = null;
        if (value != null) {
            if (value instanceof BigDecimal) {
                ret = (BigDecimal) value;
            } else if (value instanceof String) {
                ret = new BigDecimal((String) value);
            } else if (value instanceof BigInteger) {
                ret = new BigDecimal((BigInteger) value);
            } else if (value instanceof Number) {
                ret = new BigDecimal((String.valueOf(value)));
            } else {
                throw new ClassCastException("Not possible to coerce [" + value + "] from class " + value.getClass() + " into a BigDecimal.");
            }
        }
        return ret;
    }
}
